package thread;

import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ThProdCons extends Thread {

    private static int atual = 0;//global para os objetos
    
    public static int getAtual(){
        return atual;
    }
    private final boolean isProdutor;
    private final int quantidade;

    public ThProdCons(boolean isProdutor, int quantidade) {
        this.isProdutor = isProdutor;
        this.quantidade = quantidade;
    }
    private final static int maximo = 100;

    private synchronized boolean executar() { // rodar sem o sincronizar pode gerar erro
        if (isProdutor) {
            if (atual + quantidade <= maximo) {
                atual += quantidade;
                return true;
            } else {
                return false;
            }
        } else {
            if (atual - quantidade >= 0) {
                atual -= quantidade;
                return true;
            } else {
                return false;
            }
        }
    }

    @Override
    public void run() {
        Random r1 = new Random();
        while (true) {
            try {
                Thread.sleep(r1.nextInt(2000));
            } catch (InterruptedException ex) {
                Logger.getLogger(ThProdCons.class.getName()).log(Level.SEVERE, null, ex);
            }
            if (executar()) {
                System.out.println(((isProdutor) ? "Produzido " : "Consumido ") + quantidade);
            } else {
                System.out.println("Falha ao " + ((isProdutor) ? "Produzir " : "Consumir "));
            }
        }
    }
}
